from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import text
ModelBase = declarative_base()

"""
Model 等同于数据库的一张表
Column 这张表的一列
"""


class Users(ModelBase):
    __tablename__ = 'users'
    id = Column(String(2), primary_key=True)
    name = Column(String(20))
    score = Column(Integer)


engine = create_engine("sqlite:///test.db", echo=True)
Session = sessionmaker(bind=engine)

"""
Session 已经和我们的SQLite 的数据库的Engine 关联起来了，
但是我们可以发现它还没有打开任何到数据库的连接connection。当一个Session
被首次使用时，它会从Engine 所维护的连接池中取出一个链接来操作数据库。
这个链接在我们应用有所更改或者关闭Session 时被释放。
"""
session = Session()
ed_user = Users(id='A-005', name='jiahong', score=101)
"""
当这个操作完成之后，我们成这个User 实例的状态为pending。目前实际上还没有执行SQL操作，也就是
说数据库中还没有和这个User 实例对应的行。Session 将会在需要的时候执行响应的SQL命令，这个过程我们称之为flush。
如果我们试图查询,所有处于pending 状态的信息将会首先被flush，然后负责进行查询到的SQL语言再次之后立即被执行。
"""
session.add(ed_user)
return_user = session.query(Users).filter_by(name="jiahong").first()
ed_user.score = 200
session.commit()

